class NumberAnimate {
    constructor(opt) {
          let def = {
            from: 0, //开始时的数字        
            speed: 1000, // 总时间      
            refreshTime: 100, // 刷新一次的时间      
            decimals: 0, // 小数点后的位数           
            onUpdate: function () {}, // 更新时回调函数       
            onComplete: function () {} // 完成时回调函数      
          }   
            this.tempValue = 0; //累加变量值       
            this.opt = Object.assign(def, opt); //assign传入配置参数      
            this.loopCount = 0; //循环次数计数      
            this.loops = Math.ceil(this.opt.speed / this.opt.refreshTime); //数字累加次数     
            console.log(this.loops)
            this.increment = (this.opt.from / this.loops); //每次累加的值       
            this.interval = null; //计时器对象  
            setTimeout(()=>{
                this.init();
            },200)    
        }
        init() {
            this.interval = setInterval(() => {
                this.updateTimer()
            }, this.opt.refreshTime);
        }
        updateTimer() {
            this.loopCount++;
            this.tempValue = this.formatFloat(this.tempValue, this.increment).toFixed(this.opt.decimals);
            if (this.loopCount >= this.loops) {
                clearInterval(this.interval);
                this.tempValue = this.opt.from;
                this.opt.onComplete();
            }
            this.opt.onUpdate();
        } //解决0.1+0.2不等于0.3的小数累加精度问题   
        formatFloat(num1, num2) {
            let baseNum, baseNum1, baseNum2;
            try {
                baseNum1 = num1.toString().split(".")[1].length;
            } catch (e) {
                baseNum1 = 0;
            }
            try {
                baseNum2 = num2.toString().split(".")[1].length;
            } catch (e) {
                baseNum2 = 0;
            }
            baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
            return (num1 * baseNum + num2 * baseNum) / baseNum;
        };
    }
    export default NumberAnimate;